Bootstrap
Solving Puzzle with Chain Effect

Project Overview

Project Type: Personal
Focus: Game Production
Role: Game Designer and Programmer
Game Engine: Unreal 4
Language: Unreal Blueprint
Description:
Trial of Chains (Puzzle) is a slow-paced puzzle.
The player will act as an adventurer collect lost runes in mystical floating islands. The rule of thumb to pass all levels it to make most use of all props in levels.
Controls:
     - Arrow keys / WSAD = move
     - Space / Enter / E / Num 0 = attack
     - Esc = pause
     - R = restart current level
     - C = toggle camera view
     - F11 = toggle fullscreen / windowed
Features:
     ▪  Game Design & Programming
     ▪  Turn-based Chain Effect
     ▪  Square Grids of Board
     ▪  Reusable Gameplay Kit
     ▪  Puzzle with Infinite Combinations
     ▪  Progression of Difficulty
     ▪  UI (Loading, Level, Complete)


Part 01 - Star

The star is the goal to pass the level. Every level only has one star which is the goal that the player is trying to reach.

Star
Star Behaviors::
Initialize to the coordinate (Vector 2D) into the grid board.

When it is collected by character,
     ▪   Play win SE
     ▪   Change VFX to win Niagara System for 0.3s
     ▪   Disable character movement
     ▪   Play level complete SE
     ▪   Fade out level BGM
     ▪   Create UI Widget of Level Complete
     ▪   Set off the flag of IsInLevel (for game pause and new level initialization)

Star Behavior part I
Star Behavior part II

Part 02 - Door

Door blocks the character, until it’s open. It is controlled by a switch (pad) in the level. The player needs to figure out the specific switch controlling it. However, projectiles from Turret can fly through it.

Door
Door Behaviors::
Initialize to the coordinate (Vector 2D) into the grid board.

When it’s Open,
     ▪   Set grid engagement to self
     ▪   move the door mesh to on location

When it’s Closed,
     ▪   Set grid engagement to null
     ▪   Move the door mesh to off location

Door Variables
Door Behaviors

Part 03 - Toggle Pad

When the character or a box moves onto the pad, it’s on; when the character or a box moves onto it again, it’s off. When it’s on, the controlling item will be triggered with according behavior.

Toggle Pad
Toggle Pad Behaviors::
Initialize to the coordinate (Vector 2D) into the grid board.

Set On
     ▪   Change light color to on color
     ▪   Play trigger on SE,
     ▪   Trigger control item
Set Off
     ▪   Change light color to off color
     ▪   Play trigger off SE

Toggle Pad Event - OnBeginOverlap
Toggle Pad Event - SetOn/SetOff

Part 04 - Box

Box can be pushed around by the character. Box also can be moved by getting hit from projectiles which is shot from turret. When box push to water, it will drop down and fill the water to make the grid passable for the character.

Box
Box Main Behaviors::
Initialize to the coordinate (Vector 2D) into the grid board.

Get Hit from Source, (if it can be pushed)
     ▪   Move the box to the target grid location
     ▪   Update box coordinate
     ▪   Update character move grids
     ▪   Disable character movement for a short time (to fix a possible bug)
Drop Down
     ▪   Move the box to the target location
     ▪   Set engagement for the new coordinate.

Box Event - Get Hit from Source
Box Event - Drop Down

Part 05 - Keep Pad

When the character or a box is on the pad, it’s on; when nothing is on it, it’s off. When it’s on, the controlling item will be triggered with according behavior.

Keep Pad
Keep Pad Behaviors::
Initialize to the coordinate (Vector 2D) into the grid board.

Toggle state
On Begin Overlap to Set On;
End Begin Overlap to Set Off

Set On
     ▪   Change light color to on color,
     ▪   Play trigger on SE
     ▪   Trigger control item on
Set Off
     ▪   Change light color to off color,
     ▪   Play trigger off SE
     ▪   Trigger control item off

Keep Pad Event - OnBeginOverlap
Keep Pad Event - SetOn/SetOff

Part 06 - Turret & Projectile

Turret can shoot the projectile along its facing direction.
Projectile can hit box to move it. Projectile can deal damage to the character.

Projectile
Turret
Behaviors::
Initialize to the coordinate (Vector 2D) into the grid board.

Turret Shoot
     ▪   Spawn a projectile at barrel front end
     ▪   Play shoot SE
     ▪   Start barrel recoil animation

Projectile Hit Event:
     ▪   Destroy particle system
     ▪   Spawn hit VFX;
     ▪   Play hit SE
     ▪   If it hits character, character takes damage; if it hits box, move it if pushable.

Turret Event - Shoot
Projectile Event - Hit

Part 07 - Board & Controller

Grid Board is initialized in game instance InitLevel Event, the board size is adjustable. All items in levels are stored in an array of customized structure. The player can simply use arrow keys or mouse click to move the character.

Board
Game Instance Init Board
Toggle Camera Following

Reflection

This project is a retro to JRPG and Go series of Puzzle. I'm very ambitious for it. It can be modified to a pure puzzle, a dungeon RPG, a TRPG and more. Many systems are built for later iterations.

▪   In terms of Design, get inspired by Lara Croft Go and Into the Breach, I was thinking about creating more connections between items. At the same time, I was trying to keep the game simple in input.

▪   In terms of Programming, When I was dealing with those item connections, interface is very helpful to make multi-behaviors.

▪   To make the level design easier, I spent part of time on level design tool, so that I could edit the level staticly in editor before running.

▪   For UI design, I realized UMG can be nested and reusable. By creating customized event dispatcher, the same UI component can have different behaviors when it's resused.

▪   To make the game both static and dynamic, or say closed for finished levels and open for new level design, the system supports both reading data from a datatable or from current level layout.

▪   I'm still thinking about Synergy and Emergent Gameplay. With this project, I guess I'm closer to the essential of elegant system design.

▪   There is a hard decision: Can player move when an item is activating and moving?

      Plan A: To confine movement, so there will be less unexpected bugs. But there will be less gameplay possibility as well.
      Plan B: To give players freedom, so it will be more likely to have emergent gameplay. But more bugs are there.

Due to time and energy, I chose Plan A so far. But in the future, I will try Plan B.